﻿using System;
using System.Collections.Generic;
using System.Web;
using FancyIdea.PingShui.Core.Dal;
using FancyIdea.PingShui.Core.DbHelper;
using System.Data;
using FancyIdea.PingShui.Core.Util;

namespace FancyIdea.PingShui.Core.Bll
{
    /// <summary>
    /// 基本信息 的摘要说明
    /// </summary>
    public class 基本信息 : HttpHandler
    {
        private void Save()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户基本信息管理.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string method = GetStringValue("m");
            Dal.基本信息 baseInfo = new Dal.基本信息();
            baseInfo.操作时间 = DateTime.Now;
            baseInfo.纳税人类别 = GetInt32Value("纳税人类别");
            baseInfo.纳税人代码 = GetStringValue("纳税人代码");
            baseInfo.纳税人名称 = GetStringValue("纳税人名称");
            string 税务人员代码 = null;
            try
            {
                税务人员代码 = Session["username"].ToString();
            }
            catch
            {
                WriteReturnXml(-1, "未找到当前登录用户信息，需重新登录", null);
                return;
            }
            //string 税务机关代码 = 税务机关和人员操作.GetUnitByPerson(税务人员代码);
            string 税务机关代码 = GetStringValue("税务机关代码");
            //if (string.IsNullOrEmpty(税务机关代码))
            //{
            //    WriteReturnXml(-1, "未找到当前税务人员的机关信息", null);
            //    return;
            //}
            baseInfo.税务机关代码 = 税务机关代码;
            baseInfo.税收管理员代码 = 税务人员代码;
            baseInfo.街道代码 = GetStringValue("街道代码");
            baseInfo.门牌号码 = GetStringValue("门牌号码");
            baseInfo.建筑物代码 = GetStringValue("建筑物代码");
            baseInfo.楼层 = GetStringValue("楼层");
            baseInfo.法定代表人 = GetStringValue("法定代表人");
            baseInfo.座机号码 = GetStringValue("座机号码");
            baseInfo.手机号码 = GetStringValue("手机号码");
            baseInfo.地方税务登记证号码 = GetStringValue("地方税务登记证号码");
            baseInfo.行业代码 = GetStringValue("行业代码");
            baseInfo.行业细目代码 = GetStringValue("行业细目代码");
            baseInfo.经营范围 = GetStringValue("经营范围");
            baseInfo.征收品目代码 = GetStringValue("征收品目代码");
            baseInfo.征收项目代码 = GetStringValue("征收项目代码");
            baseInfo.税收定额 = GetFloatValue("税收定额");
            if (method.Equals("add"))
            {
                if (基本信息操作.Add("基本信息表", baseInfo))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "添加失败", null);
                }
            }
            else if (method.Equals("edit"))
            {
                if (基本信息操作.UpdateBaseInfo(baseInfo))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "修改失败", null);
                }
            }
        }

        private void List()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户基本信息管理.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
           = new SimpleQueryBuilder()
           {
               FieldsString = @"a.*,i.税务人员姓名 as 税收管理员,b.税务机关名称,c.行业名称,d.行业细目名称,
c.成本利润率 as 行业成本利润率,f.征收税率,
e.征收项目名称 as 征收项目,f.征收品目名称 as 征收品目",
               FromString = @"from 基本信息表 a 
left join 税务机关表 b on b.税务机关代码=a.税务机关代码 
left join 行业表 c on c.行业代码=a.行业代码 
left join 行业细目表 d on d.行业细目代码=a.行业细目代码 
left join 征收项目表 e on e.征收项目代码=a.征收项目代码 
left join 征收品目表 f on f.征收品目代码=a.征收品目代码 and f.征收项目代码=a.征收项目代码
left join 税务人员表 i on i.税务人员代码= a.税收管理员代码",
               PageOrderString = "order by a.税务机关代码,a.纳税人代码 desc",
               FieldsStringForCount = "count(a.纳税人代码) as count"
           };
            List<string> con = new List<string>();
            string name = GetStringValue("纳税人名称");
            string code = GetStringValue("纳税人代码");
            string oper = GetStringValue("税收管理员");
            if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(code)&&
                string.IsNullOrEmpty(oper))
            {
                WriteListXml(0, "成功", 0, 0, 0, 0, null);
                return;
            }
            con.Add("a.纳税人名称 like '%" + name + "%'");
            con.Add("a.纳税人代码 like '%" + code + "%'");
            con.Add("i.税务人员姓名 like '%" + oper + "%'");
            con.Add("a.税收管理员代码 like '%" + Session["username"].ToString() + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void ListSearch()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
                          权限列表.纳税户通用查询统计.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
           = new SimpleQueryBuilder()
           {
               FieldsString = @"a.*,i.税务人员姓名 as 税收管理员,b.税务机关名称,c.行业名称,d.行业细目名称,
c.成本利润率 as 行业成本利润率,f.征收税率,
e.征收项目名称 as 征收项目,f.征收品目名称 as 征收品目",
               FromString = @"from 基本信息表 a 
left join 税务机关表 b on b.税务机关代码=a.税务机关代码 
left join 行业表 c on c.行业代码=a.行业代码 
left join 行业细目表 d on d.行业细目代码=a.行业细目代码 
left join 征收项目表 e on e.征收项目代码=a.征收项目代码 
left join 征收品目表 f on f.征收品目代码=a.征收品目代码 and f.征收项目代码=a.征收项目代码
left join 税务人员表 i on i.税务人员代码= a.税收管理员代码",
               PageOrderString = "order by a.税务机关代码,a.纳税人代码 desc",
               FieldsStringForCount = "count(a.纳税人代码) as count"
           };
            List<string> con = new List<string>();
            string name = GetStringValue("纳税人名称");
            string code = GetStringValue("纳税人代码");
            float qizheng = GetFloatValue("起征点");
            string oper = GetStringValue("税收管理员");
            if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(code) &&
                string.IsNullOrEmpty(oper) && qizheng <= 0)
            {
                WriteListXml(0, "成功", 0, 0, 0, 0, null);
                return;
            }
            //con.Add("a.纳税人类别=" + GetInt32Value("纳税人类别"));
            con.Add("a.纳税人代码 like '%" + code + "%'");
            con.Add("a.纳税人名称 like '%" + name + "%'");
            con.Add("i.税务人员姓名 like '%" + oper + "%'");
            //con.Add("a.税收管理员代码 like '%" + Session["username"].ToString() + "%'");
            if (qizheng > 0)
            {
                con.Add("a.税收定额<=" + qizheng);
            }
            //con.Add("e.征收项目代码= f.征收项目代码");//联合主键
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void DropDown()
        {
            DataTable table = 基本信息操作.GetDropDown();
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "查询失败", table);
            }
        }

        private void Get()
        {
            string 纳税人代码 = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty("纳税人代码"))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 基本信息操作.GetBaseInfoRow(纳税人代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void Delete()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户基本信息管理.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 纳税人代码 = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty("纳税人代码"))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (基本信息操作.DeleteBaseInfo(纳税人代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void DeleteMulti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户基本信息管理.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string[] 纳税人代码 = GetStringsValue("纳税人代码");
            if (基本信息操作.DeleteBaseInfo(纳税人代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }
    }
}